﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Web.Services;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class NewSchedule : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    CargaHorarios();
                    CargarPeriodosDelDia();
                    lblvalida.Text = "";
                    lblvalida.Visible = false;
                    btnGuardarHorario.Attributes.Add("onclick", "this.disabled = true,this.value='Procesando...'; " + ClientScript.GetPostBackEventReference(btnGuardarHorario, null) + ";");

                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
            else
            {
                lblvalida.Text = "";
                lblvalida.Visible = false;
            }
           
        }
        protected void CargaHorarios()
        {
            ListadoHorarios oListadoHorarios = new ListadoHorarios();
            List<Horarios> lista = new List<Horarios>();
            oListadoHorarios.idEstado = 1;
            lista = oListadoHorarios.getHorarios();
            if (lista.Count > 0)
            {
                gvHorarios.DataSource = lista;
                gvHorarios.DataBind();
            }
        }
        protected void CargarPeriodosDelDia()
        {
            ListadoPeriodos oListadoPeriodos = new ListadoPeriodos();
            List<PeriodosDelDia> lista = new List<PeriodosDelDia>();
            lista = oListadoPeriodos.getPeriodos();
            lista.Insert(0, new PeriodosDelDia() { idPeriodoDia = 0, periodo = "<Elige una opción>" });
            ddlPeriodoDia.DataSource = lista;
            ddlPeriodoDia.DataValueField = "idPeriodoDia";
            ddlPeriodoDia.DataTextField = "periodo";
            ddlPeriodoDia.DataBind();
        }

        protected void btnGuardarHorario_Click(object sender, EventArgs e)
        {
            Validaciones oValidaciones = new Validaciones();
            if (Page.IsValid)
            {
                string mensaje = "";
                string cadena = "";
                string cadenafin = "";
                double dif = 0;
                if (btnGuardarHorario.Text == "Guardar Horario")
                {
                    cadena = txtHoraInicio.Text;
                    cadenafin = txtHoraFin.Text;
                    if (cadena.Length == 8)
                    {
                        mensaje = oValidaciones.VerificaHorario(cadena);
                        if (mensaje == "FORMATO CORRECTO")
                        {
                            if (cadenafin.Length == 8)
                            {
                                mensaje = oValidaciones.VerificaHorario(cadenafin);
                                if (mensaje == "FORMATO CORRECTO")
                                {
                                    mensaje = oValidaciones.VerificaHorario(cadenafin);
                                }
                            }
                            else
                            {
                                mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA FIN";
                                ActivaError();
                                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR VERIFICAR EL FORMATO DE LA HORA FIN')", true);

                            }
                        }
                    }
                    else
                    {
                        mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA INICIO";
                        ActivaError();
                        ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR VERIFICAR EL FORMATO DE LA HORA INICIO')", true);

                    }
                    if (mensaje == "FORMATO CORRECTO")
                    {
                        if (ddlPeriodoDia.SelectedValue == "0")
                        {
                            mensaje = "DEBE SELECCIONAR UNA OPCIÓN EN PERIODO DEL DIA";
                        }
                        else
                        {
                            try
                            {
                                TimeSpan ts = new TimeSpan();
                                ts = DateTime.Parse(txtHoraFin.Text) - DateTime.Parse(txtHoraInicio.Text);
                                dif = ts.TotalSeconds;
                                if (dif <= 0.0)
                                {
                                    mensaje = "HORA FINAL MENOR O IGUAL A LA INICIAL";
                                    ActivaError();
                                    txtHoraFin.Focus();
                                }
                                else
                                {
                                    ListadoHorarios oHorarios = new ListadoHorarios();
                                    oHorarios.horaInicio = txtHoraInicio.Text;
                                    oHorarios.horaFin = txtHoraFin.Text;
                                    oHorarios.idPeriodo = int.Parse(ddlPeriodoDia.SelectedValue);
                                    mensaje = oHorarios.SaveHorario();
                                    if (mensaje == "HORARIO GUARDADO CORRECTAMENTE")
                                    {
                                        ActivaSuccess();
                                        LimpiarCampos();
                                        ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('HORARIO GUARDADO CORRECTAMENTE')", true);
                                    }
                                    else
                                    {
                                        ActivaError();
                                    }

                                }
                            }
                            catch (Exception)
                            {
                                mensaje = "ERROR REVISE FORMATO DE LA FECHA";
                                ScriptManager.RegisterStartupScript(this.Page, GetType(), "Mensaje Error", "mensajeMal('ERROR REVISE FORMATO DE LA FECHA')", true);
                                ActivaError();
                            }
                           


                        }
                    }
                    lblvalida.Text = mensaje;
                    lblvalida.Visible = true;
                    CargaHorarios();
                }
                else if (btnGuardarHorario.Text == "Editar Horario")
                {
                    cadena = txtHoraInicio.Text;
                    cadenafin = txtHoraFin.Text;
                    if (cadena.Length == 8)
                    {
                        mensaje = oValidaciones.VerificaHorario(cadena);
                        if (mensaje == "FORMATO CORRECTO")
                        {
                            if (cadenafin.Length == 8)
                            {
                                mensaje = oValidaciones.VerificaHorario(cadenafin);
                                if (mensaje == "FORMATO CORRECTO")
                                {
                                    mensaje = oValidaciones.VerificaHorario(cadenafin);
                                }
                            }
                            else
                            {
                                mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA FIN";
                            }
                        }
                    }
                    else
                    {
                        mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA INICIO";
                    }
                    if (mensaje == "FORMATO CORRECTO")
                    {
                        if (ddlPeriodoDia.SelectedValue == "0")
                        {
                            mensaje = "DEBE SELECCIONAR UNA OPCIÓN EN PERIODO DEL DIA";
                        }
                        else
                        {
                            TimeSpan ts = new TimeSpan();
                            ts = DateTime.Parse(txtHoraFin.Text) - DateTime.Parse(txtHoraInicio.Text);
                            dif = ts.TotalSeconds;
                            if (dif <= 0.0)
                            {
                                mensaje = "HORA FINAL MENOR O IGUAL A LA INICIAL";
                                ActivaError();
                                txtHoraFin.Focus();
                            }
                            else if(Session["idHorarioEditar"]!=null)
                            {
                                ListadoHorarios oHorarios = new ListadoHorarios();
                                oHorarios.horaInicio = txtHoraInicio.Text;
                                oHorarios.horaFin = txtHoraFin.Text;
                                oHorarios.idPeriodo = int.Parse(ddlPeriodoDia.SelectedValue);
                                oHorarios.idHorario = (int)Session["idHorarioEditar"];
                                mensaje = oHorarios.EditHorario();
                                if (mensaje == "HORARIO EDITADO CORRECTAMENTE")
                                {
                                    ActivaSuccess();
                                    LimpiarCampos();
                                    NuevoHorario();
                                    Session.Remove("idHorarioEditar");
                                }
                                else
                                {
                                    ActivaError();
                                }
                            }

                        }
                    }
                    lblvalida.Text = mensaje;
                    lblvalida.Visible = true;
                    CargaHorarios();
                }
                
            }
            else
            {
                lblvalida.Text = "VERIFIQUE CAMPOS DEL FORMULARIO";
                lblvalida.Visible = true;
                lblvalida.ForeColor = Color.Red;
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "Mensaje Error", "mensajeMal('VERIFIQUE CAMPOS DEL FORMULARIO')", true);

            }
        }
        protected void LimpiarCampos()
        {
            txtHoraInicio.Text = string.Empty;
            txtHoraFin.Text = string.Empty;
            CargarPeriodosDelDia();
        }
       
        protected void ActivaError()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Red;
        }
        protected void ActivaSuccess()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Green;
        }

        protected void gvHorarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListadoHorarios oListadoHorario = new ListadoHorarios();
            List<Horarios> Lista = new List<Horarios>();
            GridViewRow row = gvHorarios.SelectedRow;
            int id = Convert.ToInt32(gvHorarios.DataKeys[row.RowIndex].Value);
            oListadoHorario.idHorario = id;
            Lista = oListadoHorario.getHorarioById();
            txtHoraInicio.Text = Lista[0].horaInicio;
            txtHoraFin.Text = Lista[0].horaFin;
            ddlPeriodoDia.SelectedValue = Lista[0].idPeriodo.ToString();
            Session["idHorarioEditar"] = id;
            EditarHorario();


        }

        protected void gvHorarios_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
           string mensaje = "";
           ListadoHorarios oListado = new ListadoHorarios();
           int index = e.RowIndex;
           int id = (int)gvHorarios.DataKeys[index].Value;
           oListado.idHorario = id;
           oListado.idEstado = 2;
           mensaje = oListado.DeleteHorario();
           if (mensaje=="HORARIO ELIMINADO CORRECTAMENTE")
           {
               lblvalida.Text = mensaje;
               ActivaSuccess();
               LimpiarCampos();
               NuevoHorario();
               CargaHorarios();
           }

        }
        private void EditarHorario()
        {
            btnCancelar.Visible = true;
            btnGuardarHorario.Text = "Editar Horario";
            lblvalida.Text = string.Empty;
            lblvalida.Visible = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("NewSchedule.aspx");
        }
        private void NuevoHorario()
        {
            btnGuardarHorario.Text = "Guardar Horario";
            btnCancelar.Visible = false;

        }
        [WebMethod]
        public static string Dime()
        {
            return "Hola";
        }
    }
}